/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Reportes.Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import pe.edu.pucp.Modelo.Ciudad;
import pe.edu.pucp.Modelo.Continente;
import pe.edu.pucp.Modelo.Pais;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Reportes.DAO.ReporteKardexDAO;
import pe.edu.pucp.Reportes.Vista.ReporteKardexGUI;
import pe.edu.pucp.Util.Reportclass.RepKardex;
import pe.edu.pucp.Util.Reportclass.RepKardexDataSource;
import pe.edu.pucp.Util.ValHelper;

/**
 *
 * @author jorge
 */
public class ReporteKardexControlador {
    private ReporteKardexDAO dao;
    private ReporteKardexGUI view;
    private ArrayList<RepKardex> lstKardex;
    private ArrayList<Ciudad> lstCiudad;
    private ArrayList<Continente> lstContinente;
    private ArrayList<Pais> lstPais;
    private Usuario usr;
    
    public ReporteKardexControlador(ReporteKardexDAO rkdao, ReporteKardexGUI rkview, Usuario user){
        dao=rkdao;
        view=rkview; 
        usr=user;
        view.mostrarPermisos(new  ArrayList<Permiso>(user.getPerfil().getPermisos()));  
           
        llenarContinenteCombo();
        view.llenarComboPais(null);
        view.llenarComboCiudad(null);    
        
        view.addCambiarContinente(new cambiarLstPais());
        view.addCambiarPais(new cambiarLstCiudad());        
        view.addBuscarListener(new listarKardex());
        view.addLimpiarListener(new limpiar());
        view.addGenerarListener(new Generar());
//        view.addCarpeta(new AbrirFile()); 
        
        lstKardex = dao.listarKardex();
        view.llenaGrilla(lstKardex);         
        
    }
    
    class listarKardex implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            int cont = view.getContinente()<0? -1: lstContinente.get(view.getContinente()).getIdcontinente();
            int pais = view.getPais()<0? -1: lstPais.get(view.getPais()).getIdpais();
            int ciud = view.getCiudad()<0? -1: lstCiudad.get(view.getCiudad()).getIdciudad();
            int aper = view.getFechaInicio()!=null? dao.inicioKardex(cont, pais, ciud, view.getFechaInicio()):0;
            lstKardex = dao.listarKardex(cont, pais, ciud, view.getFechaInicio(), view.getFechaFin(),aper);
            view.llenaGrilla(lstKardex);  
        }
    }    
    
    private void llenarContinenteCombo(){
        lstContinente = dao.listarContinente();
        view.llenarComboContinente(lstContinente);
    }

    private void llenarPaisCombo(Continente cont){
        lstPais= dao.listarPais(cont.getIdcontinente());
        view.llenarComboPais(lstPais);
    }       
    
    private void llenarCiudadCombo(Pais pa){
        lstCiudad = dao.listarCiudad(pa.getIdpais());
        view.llenarComboCiudad(lstCiudad);
    }   
    
    
//    class AbrirFile implements ActionListener {
//        @Override
//        public void actionPerformed(ActionEvent e) {
//        JFileChooser filechooser = new JFileChooser();
//        filechooser.setMultiSelectionEnabled(false); 
//        filechooser.setDialogTitle("Escoger carpeta");
//         filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//        int result = filechooser.showOpenDialog(null); 
//        if (result == JFileChooser.APPROVE_OPTION){
//            File f = filechooser.getSelectedFile();
//            view.setpath(f.getPath());
//            }
//        }         
//        }
    
    class cambiarLstPais implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange()== ItemEvent.SELECTED ){
                if (view.getContinente()>=0){ llenarPaisCombo(lstContinente.get(view.getContinente())); }
                else{ view.llenarComboPais(null); }                    
            }               
        }                        
    }  
    
    class cambiarLstCiudad implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {            
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (view.getPais()>=0){ llenarCiudadCombo(lstPais.get(view.getPais())); }
                else { view.llenarComboCiudad(null); }
            }
        }        
    }

    class limpiar implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            view.LimpiarDatos(); 
        }        
    }
    
    
    class Generar implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {            
            if(lstKardex.isEmpty()){
                ValHelper.mostrarError("No hay datos para generar el PDF");
            }
            else{
                try {            
                    RepKardexDataSource datasource = new RepKardexDataSource();                 
                    for (int i=0;i<lstKardex.size();i++){                
                        datasource.addRepKardex(lstKardex.get(i));                
                    }        
                    HashMap hs = new HashMap(); 

                    hs.put("creador", usr.getNombre() + " "+usr.getAppaterno() + " "+usr.getApmaterno());
                    
                    String master = System.getProperty("user.dir");
                    master += "/../SIGEPA_sist/src/main/resources/Recurso/jasper/Kardex.jasper";
                    JasperReport reporte = (JasperReport)JRLoader.loadObjectFromFile(master);                                                
                    JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, hs, datasource);
                    JasperViewer.viewReport(jasperPrint,false);

                } catch (JRException ex) { }                        
            }
        }
    }     
}
